home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / tool / artemis1 / src / menu.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-19  |  5.8 KB  |  199 lines

  1. /*
  2.     menu.h
  3. */
  4.  
  5. enum {
  6.     ITEMTYPE_BUTTON,
  7.     ITEMTYPE_SCROLLBAR,
  8.     ITEMTYPE_SELECTOR
  9. };
  10.  
  11. /*
  12.     構造体のメンバをモジュール menu だけに公開するためのマクロ
  13.     (この定義を変更してコンパイルしなおせば、メンバが不正アクセス
  14.      されているかどうかがわかる)
  15. */
  16.  
  17. #define    DEBUG_M(a)    __ ## a ## __
  18.  
  19. #ifdef MODULE_MENU
  20.     #define    M(a)    a
  21. #else
  22.     #define    M(a)    DEBUG_M(a)
  23. #endif
  24.  
  25. typedef    struct _btn {
  26.     short int    M(x),M(y);        // メニュー内での位置
  27.     short int    M(xlen),M(ylen);    // アイテムのサイズ
  28.     short int    M(type);            // アイテムの種別
  29.     int            M(var);            // 種別ごとのデータ
  30.                                 //        itemPIC ... 絵柄番号
  31.                                 //        itemBOX ... 矩形の描画色
  32.     void        (*M(dspfunc))(int x,int y);    // アイテム表示時に呼び出す関数
  33.     bool        M(noselect);        // 選択が有効かどうか
  34.     struct _btn    *next;
  35.     int            id;
  36. } BUTTON;
  37.  
  38. #define    barHORI        0
  39. #define    barVERT        1
  40.  
  41. typedef struct _sbr {    // ● スクロールバー
  42.     int            M(x),M(y);    // メニュー内での位置
  43.     int            M(type);    // barHORI(0):横型  barVERT(1):縦型
  44.     int            M(len);        // バーの長さ(増/減ボタンも含む)
  45.     int            M(allsize);    // バー全体の意味する大きさ
  46.     int            M(dspsize);    // 全体のうち、表示されている部分の大きさ
  47.     int            M(dsppos);    //               〃               位置
  48.     void        (*M(dspfunc))(int pos);    // 表示対象を更新する関数
  49.     bool        M(dispnum);    //バーの左(下)にそのバーが表す数値を表示するか
  50.     int            M(numofs);        // バーの持つ数値の底上げ値
  51.     bool        M(inv);        // バーの意味する向きを逆にするかどうか
  52.     struct _sbr    *next;
  53.     int            id;
  54. } SCROLLBAR;
  55.  
  56. typedef struct _sel_e {
  57.     int                M(x),M(y);
  58.     char            *M(str);
  59.     bool            M(available);
  60.     struct _sel_e    *next;
  61.     int                id;
  62. } SELECTOR_ELEMENT;
  63.  
  64. typedef struct _sel {
  65.     int                    M(var);
  66.     SELECTOR_ELEMENT    *M(elist);
  67.     SELECTOR_ELEMENT    *M(d_elist);
  68.     struct _sel            *next;
  69.     int                    id;
  70.     struct _sel_e        *cur_se;    // 選択要素を順にとりだすポインタ
  71.     bool                se_static;    // cur_se が elist か d_elist か
  72. } SELECTOR;
  73.  
  74. #define    SBAR    SCROLLBAR
  75. #define    SEL        SELECTOR
  76. #define    SEL_E    SELECTOR_ELEMENT
  77.  
  78. typedef struct _anyitem {
  79.     struct _anyitem *M(next);
  80.     int                M(itemtype);
  81.     void            *M(item);
  82. } ANYITEM;
  83.  
  84. #define    NOFNC    (void (*)())0
  85.  
  86.  
  87. typedef    struct _men
  88. {
  89.     char        *M(title);
  90.     int            M(xlen),M(ylen);
  91.     BUTTON        *M(buttonlist);
  92.     SCROLLBAR    *M(sbarlist);
  93.     SELECTOR    *M(sellist);
  94.     BUTTON        *M(d_buttonlist);
  95.     SCROLLBAR    *M(d_sbarlist);
  96.     SELECTOR    *M(d_sellist);
  97.     void        (*M(dspfunc))();
  98.     void        (*M(ersfunc))();
  99.     int            M(x),M(y);
  100.     int            M(x0),M(y0);
  101.     bool        M(nobuf);            // 表示域退避をしているかどうか
  102.     bool        M(display);        // 画面に表示されているかどうか
  103.     void        *M(data);
  104. } MENU;
  105.  
  106. #undef    M
  107.  
  108. #define    typeSTR        1
  109. #define    typePIC        2
  110. #define    typeBOX        3
  111. #define    typeOTHER    4
  112. #define    typeSTRe    5        /* 強調文字列 */
  113. #define    typeSTRb    6        /* 箱入り文字列 */
  114. #define    typeSTRc    7        /* センタリング立体強調文字列 */
  115. #define    typeBUTTONS    8
  116. #define    DMY            0
  117.  
  118.  
  119. #define    OutOfMenu        -1
  120. #define    itemOther        -2
  121. #define    itemEraseMenu    -3
  122. #define    itemMoveMenu    -4
  123. #define    itemScrollBar    -5
  124. #define    itemSelector    -6
  125.  
  126.  
  127. int        menu_init();
  128. void    menu_end();
  129. // 各種取得関数
  130. int        menu_plt(int n);
  131. int        menu_ifdisp();
  132. MENU*    menu_getcurmenu();
  133. void    menu_getmenuxy(MENU *menu, int *x, int *y, int *xlen, int *ylen);
  134. void    menu_getbuttonxy(MENU *menu,int btnnum,int*x,int*y,int*xlen,int*ylen);
  135. int        menu_where(int x,int y,MENU *menu, int *ax,int *ay,SCROLLBAR **sbarp);
  136. // メニュー
  137. int        menu_disp(MENU *menu);
  138. int        menu_dispxy(int x, int y, MENU *menu);
  139. void    menu_erase();
  140. int        menu_addselector(MENU *m, SEL *s);
  141. void    menu_clearselector(MENU *m);
  142. void    menu_settitle(MENU *m, char *title);
  143. // メニューの移動
  144. void    menu_move();
  145. // ボタン
  146.         BUTTON    *menu_button_new(void);
  147.         void    menu_button_delete(BUTTON *b);
  148.         void    menu_button_setid(BUTTON *b,int id);
  149.         BUTTON    *menu_button(MENU *menu, int id);
  150.         void    menu_button_setxy(BUTTON *b, int x, int y);
  151.         void    menu_button_setvar(BUTTON *b, int var);
  152. // スクロールバー
  153. SCROLLBAR *menu_scrollbar(MENU *menu, int id);
  154. int        menu_scrollbar_getvar(SCROLLBAR *sp);
  155. void    menu_scrollbar_setvar(SCROLLBAR *sp, int dsppos);
  156. void    menu_scrollbar_setallsize(SCROLLBAR *sp, int allsize);
  157. void    menu_scrollbar_setdispsize(SCROLLBAR *sp, int dispsize);
  158. void    menu_scrollbar_setxy(SBAR *s,int x,int y);
  159. void    menu_scrollbar_getxy(SBAR *s,int*x,int*y,int*len);
  160. void    menu_scrollbar_setfunc(SBAR *s, void (*func)());
  161. void    menu_touchscrollbar(SCROLLBAR *sp, int ax, int ay);
  162. void    menu_drawscrollbar(SCROLLBAR *sp);
  163. void    menu_makeupscrollbar(SCROLLBAR *sp);
  164. // 選択子
  165. SEL        *menu_selector_new(void);
  166. void    menu_selector_delete(SEL *s);
  167. void    menu_selector_setid(SEL *s, int id);
  168. SEL        *menu_selector(MENU *m, int id);
  169. int        menu_selector_addelement(SEL *s, SEL_E *e);
  170. int        menu_selector_getvar(SEL *s);
  171. void    menu_selector_setvar(SEL *s, int n);
  172. void    menu_selector_makeup(SEL *sp);
  173.     // 選択要素
  174.     SEL_E    *menu_selector_element_new(void);
  175.     void    menu_selector_element_delete(SEL_E *e);
  176.     void    menu_selector_element_setid(SEL_E *e, int id);
  177.     SEL_E    *menu_selector_element(SEL *s,int id);
  178.     SEL_E    *menu_selector_element_getfirst(SEL *s);
  179.     SEL_E    *menu_selector_element_getnext(SEL *s);
  180.     void    menu_selector_element_setxy(SEL_E *e,int x,int y);
  181.     void    menu_selector_element_setstr(SEL_E *e,char *s);
  182.     void    menu_selector_element_setavail(SEL_E *e,bool f);
  183. // int        menu_selector_getvar(SEL *s);
  184. #define    menu_getselvar    menu_selector_getvar
  185. // void    menu_selector_setvar(SEL *s, int n);
  186. // void menu_selector_setavailability(MENU *menu,int sel_id,int el_id,bool flag);
  187. void    menu_touchselector(MENU *menu);
  188. // メニュー上の描画
  189. void    menu_putstr(int ofsx, int ofsy, char *str, int type);
  190. void    menu_buttonputstr(BUTTON *ip, int ofsx, int ofsy, char *str, int type);
  191. void    menu_drawbox(int x1, int y1, int xlen, int ylen);
  192. // 任意データの設定・取得・解除
  193. void    menu_setdata(MENU *menu, void *data);
  194. void    *menu_getdata(MENU *menu);
  195. void    menu_cleardata(MENU *menu);
  196.  
  197. #define    menuX    (menu_getcurmenu()->x)
  198. #define    menuY    (menu_getcurmenu()->y)
  199.